/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package desarrollosoft.ghce.entidades;

import java.util.ArrayList;
import java.util.List;
import javax.persistence.Column;
import javax.persistence.DiscriminatorValue;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.Lob;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import org.hibernate.annotations.LazyCollection;
import org.hibernate.annotations.LazyCollectionOption;

/**
 *
 * @author ariel
 */
@Entity
@DiscriminatorValue("ESTUDIO_IMAGINOLOGIA")
public class EstudioImaginologia extends Estudio {
    
    @ManyToOne
    @JoinColumn(name = "plantillaEstudioImagenes_id", nullable = false)
    private PlantillaEstudioImagenes plantillaEstudioImagenes;
    
    @Column(name = "informe", nullable = true, columnDefinition="TEXT") // text para permitir ingresar mucho texto)
    private String informe;
    
    // VALIDAR QUE ALGUNO DE LOS 2 INFORMES SEA != de null
    
    @Lob
    @Column(name = "archivo_informe", nullable = true)
    private byte[] archivoInforme;
    
    @Column(name = "nombreArchivo", nullable = true)
    private String nombreArchivo;
    
    @LazyCollection(LazyCollectionOption.FALSE)
    @OneToMany(mappedBy = "estudioImaginologia")
    private List<Imagen> listaImagenes;
    
    public EstudioImaginologia() {
        super();
    }

    public void setPlantillaEstudioImagenes(PlantillaEstudioImagenes plantillaEstudioImagenes) {
        this.plantillaEstudioImagenes = plantillaEstudioImagenes;
    }

    public PlantillaEstudioImagenes getPlantillaEstudioImagenes() {
        return plantillaEstudioImagenes;
    }

    public String getInforme() {
        return informe;
    }

    public void setInforme(String informe) {
        if (informe != null && informe.length() == 0) {
            this.informe = null;
        } else {
            this.informe = informe;
        }
    }

    public byte[] getArchivoInforme() {
        return archivoInforme;
    }

    public void setArchivoInforme(byte[] archivoInforme) {
        this.archivoInforme = archivoInforme;
    }

    public List<Imagen> getListaImagenes() {
        return listaImagenes;
    }

    public void setListaImagenes(List<Imagen> listaImagenes) {
        this.listaImagenes = listaImagenes;
    }

    public String getNombreArchivo() {
        if (nombreArchivo == null) {
            return "No se ha adjuntado informe";
        }
        return nombreArchivo;
    }

    public void setNombreArchivo(String nombreArchivo) {
        if (nombreArchivo != null && nombreArchivo.length() == 0) {
            this.nombreArchivo = null;
        } else {
            this.nombreArchivo = nombreArchivo;
        }
    }

    @Override
    public String getTipificacion() {
        return "Estudio Imaginologia";
    }

    @Override
    public String getDescripcion() {
        if (plantillaEstudioImagenes != null) {
            return plantillaEstudioImagenes.getNombre();
        }
        return ""; //??
    }

    public EstudioImaginologia clonar() {
        EstudioImaginologia estudioImaginologia = new EstudioImaginologia();
        
        estudioImaginologia.setArchivoInforme(archivoInforme);
        estudioImaginologia.setFecha(getFecha());
        estudioImaginologia.setFechaFin(getFechaFin());
        estudioImaginologia.setGravedad(getGravedad());
        estudioImaginologia.setId(getId());
        estudioImaginologia.setInforme(getInforme());
        
        if (listaImagenes == null) {
            estudioImaginologia.setListaImagenes(null);
        } else { // sino, para evitar mantener referencias a una misma lista
            List<Imagen> listaNueva = new ArrayList<>();
            for (Imagen imagen : listaImagenes) {
                listaNueva.add(imagen);
            }
            estudioImaginologia.setListaImagenes(listaNueva);
        }
        
        estudioImaginologia.setPaciente(getPaciente());
        estudioImaginologia.setPlantilla(getPlantilla());
        estudioImaginologia.setPlantillaEstudioImagenes(getPlantillaEstudioImagenes());
        estudioImaginologia.setProfesional(getProfesional());
        estudioImaginologia.setProfesionalQueLoCompleto(getProfesionalQueLoCompleto());
        estudioImaginologia.setNombreArchivo(nombreArchivo);
        
        return estudioImaginologia;
    }
}
